#include <iostream>
#include <thread>
#include <future>

//通过在线程中对promise对象设置数据，其他线程中通过future获取设置数据的方式实现获取异步任务执行结果的功能
void Add(int num1, int num2, std::promise<int> &prom){
    std::cout << "-----------add执行中-----------\n";
    std::this_thread::sleep_for(std::chrono::seconds(3));
    std::cout << "-----------add执行完-----------\n";
    prom.set_value(num1+num2);
    return ;
}

int main(){
    std::promise<int> prom;
    //建立了关联关系
    std::future<int> fu = prom.get_future();

    std::thread thr(Add, 11, 22, std::ref(prom));

    std::this_thread::sleep_for(std::chrono::seconds(3));
    std::cout << "----------main线程休眠完----------\n";//conclusion:一旦把任务发放给工作线程，工作线程立马执行（现象偶尔不符合是因为调度的问题）
 
    int res = fu.get();//阻塞等，同步关系控制着
    std::cout << "sum:" << res << std::endl;

    thr.join();
    return 0;
}